package com.kabuda.hot100.双指针.easy;

import java.util.Arrays;

/**
 * @author kabuda
 * @create 2024-11-27 17:44
 * <p>
 * 给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序。
 * <p>
 * 请注意 ，必须在不复制数组的情况下原地对数组进行操作。
 * <p>
 * 输入: nums = [0,1,0,3,12]
 * 输出: [1,3,12,0,0]
 */
public class t283_移动零 {

    public static void main(String[] args) {
        int[] arr = {6, 1, 0, 3, 12};
        moveZeroes(arr);
        System.out.println(Arrays.toString(arr));


    }


    /**
     * 把不是0的值往前放
     * * 如果数组没有0，那么快慢指针始终指向同一个位置，每个位置自己和自己交换；
     * * 如果数组有0，快指针先走一步，此时慢指针对应的就是0，所以要交换。
     *
     * @param nums
     */
    public static void moveZeroes(int[] nums) {
        //左指针
        int left = 0;
        for (int i = 0; i < nums.length; i++) {
            //右指针
            int right = i;

            //如果右指针指向的值不等于0，交换位置
            if (nums[right] != 0) {
                int temp = nums[left];
                nums[left] = nums[right];
                nums[right] = temp;
                left++;
            }
        }
    }
}
